home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
embedded
/
mcu11
/
basic11.arc
/
IOPKG.ASM
< prev
next >
Wrap
Assembly Source File
|
1990-10-10
|
5KB
|
155 lines
TTL IOPKG
PAG
*
*
OUTBYTE EQU *
INC PRINTPOS INCREMENT THE CURRENT PRINT POSITION.
PSHB SAVE THE B-REG.
PSHX SAVE THE X-REG.
LDX #OUTABLE POINT TO THE OUTPUT VECTOR TABLE.
OUTBYTE1 LDAB DEVNUM GET THE CURRENT DEVICE NUMBER.
ASLB MULT BY 2.
ABX POINT TO THE ADDRESS OF THE OUTPUT ROUTINE.
LDX 0,X GET THE ADDRESS. HAS THE VECTOR BEEN INITALIZED?
BNE OUTBYTE2 YES. GO OUTPUT THE CHARACTER.
CLR DEVNUM NO. RESET TO DEVICE #0.
LDAA #UNINIERR GO REPORT AN UNINITALIZED I/O VECTOR ERROR.
JMP RPTRERR
OUTBYTE2 JSR 0,X GO OUTPUT THE CHARACTER.
PULX RESTORE X.
PULB RESTORE B.
RTS RETURN.
*
INBYTE EQU *
PSHB SAVE THE B-REG.
PSHX SAVE THE X-REG.
LDX #INTABLE POINT TO THE INPUT VECTOR TABLE.
BRA OUTBYTE1 GO USE THE SAME CODE AS OUTBYTE.
*
*
if *>$FF00
error "BASIC Is Too Large"
endif
*
*
ORG $FF00
*
*
ACIAIN BSR ACIAINNE GO GET CHARACTER FROM ACIA, NO ECHO.
* NOW, FALL THROUGH TO ACIAOUT TO ECHO CHARACTER.
*
*
ACIAOUT PSHA SAVE THE CHARACTER TO OUTPUT.
ACIAOUT1 LDAA ACIAST GET THE ACIA STATUS.
BITA #$02 IS THE XMIT DATA REGISTER EMPTY?
BEQ ACIAOUT1 NO. WAIT TILL IT IS.
PULA YES. GET BYTE TO SEND.
STAA ACIADT SEND IT.
RTS RETURN.
*
*
*
*
*
*
ACIAINNE LDAA ACIAST GET THE ACIA STATUS.
BITA #$01 HAS A CHARACTER BEEN RECIEVED?
BEQ ACIAINNE NO. WAIT TILL WE HAVE ONE.
LDAA ACIADT YES. GET THE CHARACTER.
RTS RETURN.
*
ACIASTAT EQU *
PSHA SAVE THE A-REG.
LDAA ACIAST GET THE ACIA STATUS.
BITA #$01 CHECK FOR A CHARACTER.
PULA RESTORE A.
RTS RETURN.
*
*
SCIIN EQU *
PSHX Save the index register.
LDX IOBaseV
SCIIN1 LDAA SCSR,X GET SCI STATUS.
ANDA #$20 HAS A CHARACTER BEEN RECIEVED?
BEQ SCIIN1 NO. WAIT FOR CHARACTER TO BE RECIEVED.
LDAA SCDR,X GET THE CHARACTER.
PULX Restore X.
RTS RETURN.
*
*
SCIOUT EQU *
PSHX Save the index register.
LDX IOBaseV
PSHA SAVE THE CHARACTER TO SEND.
SCIOUT1 LDAA SCSR,X GET THE SCI STATUS.
BITA #$80 HAS THE LAST CHARACTER BEEN SHIFTED OUT?
BEQ SCIOUT1 NO. WAIT TILL IT HAS.
PULA RESTORE CHARACTER TO SEND.
STAA SCDR,X SEND THE CHARACTER.
PULX Restore X.
RTS RETURN.
*
*
SCISTAT EQU *
PSHX Save the index register.
LDX IOBaseV
PSHA SAVE THE A-REG.
LDAA SCSR,X GET THE SCI STATUS.
BITA #$20 CHECK TO SEE IF A CHARACTER HAS BEEN RECIEVED.
PULA RESTORE STATUS.
PULX Restore X.
RTS RETURN W/ STATUS.
*
*
IODevInit:
BSR InitACIA
BSR InitSCI
LDAA #JMPOP
STAA CONSTAT INITIALIZE THE CONSOLE STATUS VECTOR.
STAA INCONNE INITIALIZE THE "INPUT FROM CONSOLE NO ECHO VECT.
LDD #ACIASTAT CONSOLE IS INITIALLY THE ACIA.
STD CONSTAT+1
LDD #ACIAINNE GET BYTE FROM ACIA, DON'T ECHO IT.
STD INCONNE+1
RTS
*
*
INITSCI EQU *
PSHX Save the index register.
LDX IOBaseV
LDAA #$30 SET BAUD RATE TO 9600.
STAA BAUD,X
CLR SCCR1,X SET FOR 8 BIT OPERATION, DISABLE WAKEUP.
LDAA #$0C ENABLE THE TRANSMITER & RECEIVER.
STAA SCCR2,X
LDAA #$11 GET THE XON CHARACTER (CONTROL-Q).
STAA XONCH INITALIZE THE XON REGISTER.
LDAA #$13 GET THE XOFF CHARACTER (CONTROL-S).
STAA XOFFCH INITALIZE THE XOFF CHARACTER.
PULX
RTS RETURN.
*
*
INITACIA LDAA #$13 VALUE TO RESET THE ACIA.
STAA ACIAST RESET IT.
LDAA #$56 SET /64, RTS=HI, 8-DATA/1 STOP
STAA ACIAST
RTS RETURN.
*
*
*
PROUT EQU * SEND A CHARACTER TO THE PRINTER.
BSR SCISTAT WAS AN "X-OFF" RECIEVED?
BEQ PROUT1 NO. GO SEND THE CHARACTER.
PSHA SAVE THE CHARACTER TO SEND.
BSR SCIIN YES. GO RESET THE SCI RECEIVER STATUS.
CMPA XOFFCH WAS IT AN XOFF?
BNE PROUT2 NO. SO GO SEND THE CHARACTER.
PROUT3 BSR SCIIN GO WAIT FOR AN "X-ON" CHARACTER.
CMPA XONCH IS IT AN X-ON CHARACTER?
BNE PROUT3 NO. GO WAIT FOR AN X-ON CHARACTER.
PROUT2 PULA GET THE CHARACTER TO SEND.
PROUT1 BRA SCIOUT SEND THE CHARACTER TO THE PRINTER & RETURN.
*
*